#ifndef QLSINTERFACE_H
#define QLSINTERFACE_H

#include <QString>
#include <QJsonObject>
#include <QJsonValue>

#include <QWidget>

#include "qls_plugins_manager_global.h"

/* 插件信息 */
class QLS_PLUGINS_MANAGER_EXPORT InterfaceInfo
{
public:
    QString m_name;        ///< 插件名
    QString m_logoPath;    ///< 插件图标
    QString m_information; ///< 插件信息
    int m_level; ///< 插件等级：0：默认、按需加载；1：必装插件、启动就加载
    QString m_version; ///< 版本号

    InterfaceInfo();

    InterfaceInfo(QString name, QString logoPath, QString information,
                  int level, QString version);

    InterfaceInfo(const QJsonObject &obj);
};

/* 插件总线 */
class QLS_PLUGINS_MANAGER_EXPORT QLsBus
{
public:
    /**
     * 总线类型
     * BUS_NOTHING：不做处理
     * BUS_SIGNAL：信号
     * BUS_SLOT：槽函数
     * BUS_MSG：消息
     */
    enum Type
    {
        BUS_NOTHING = 0,
        BUS_SIGNAL = 1001,
        BUS_SLOT,
        BUS_MSG
    };

    Type type;

    typedef union
    {
        QString m_name; /* 插件名 */
        void *m_func;   /* 插件信号槽函数指针 */
    } src, dest;

    QString m_msg;
};

/* 定义接口 */
class QLS_PLUGINS_MANAGER_EXPORT QLsPluginService
{
public:
    virtual ~QLsPluginService() {}

    /* 返回一个 Widget 设置到 QLsPluginsManagerAppfwk 中进行显示 */
    virtual QWidget *createView() = 0;
};

/* 声明接口 */
#define QLsPluginService_iid "com.Service.QLsPluginService"
Q_DECLARE_INTERFACE(QLsPluginService, QLsPluginService_iid)

#endif // QLSINTERFACE_H
